package classes;


public class Cpf {
    private int[] cpf;
	
	public int[] getCpf(){
		return cpf;
	}
	
	public boolean verificaCpf(String cpf){
		this.cpf = new int[11];
		
		String numGerado = "", numEnviado = "";
		
		numEnviado = retiraCaracteresEspeciais(cpf);
		char[] num = numEnviado.toCharArray();
		
		for(int i = 0; i < num.length; i++){
			this.cpf[i] = (int) -48 + num[i];//na conversão ele soma 48 não sei porque.
		}
		
		geraDigitosVerificadores();
		
		numGerado = retiraCaracteresEspeciais(montaCpf());
		if(numEnviado.equalsIgnoreCase(numGerado)){
			return true;
		}
		return false; 
	}
	
	private void geraDigitosVerificadores(){
				
		for(int v = 0; v < 2; v++){
			int num = 0;
			int n = 0;
			int totNumeros = 10;
			if(v == 1){
				totNumeros = 11;
			}
			for(int i = totNumeros; i > 1; i--){//multipica números
				num += cpf[n++] * i;
			}
			int resto = num % 11;
			if(resto < 2 ){
				cpf[9+v] = 0;
			}else{
				cpf[9+v] = 11 - resto;
			}
		}
		
	}
	
	private String montaCpf(){
		String num = "";
		for(int i = 0; i < 11; i++){
			if(i % 3 == 0 && i != 0 && i != 9){
				num += ".";
			}
			if(i == 9){
				num +="-";
			}
			
			num += String.valueOf(cpf[i]);
		}
		return num;
	}
	
	private String retiraCaracteresEspeciais(String num){
		
		char[] cnum = num.toCharArray();
		String snum = "";
		for(int i = 0; i < cnum.length;i++){
			
			if(!String.valueOf(cnum[i]).contains(".") && !String.valueOf(cnum[i]).contains("-") ){
				
				snum += cnum[i];
				
			}
		}
		return snum;
	}
}
